|








| |
Windows操作平台下CGI的实现
华中理工大学图像识别与人工智能研究所(430074) 龚建勇
实现WWW服务器与客户的交互可以有多种途径,如CGI、ISAPI、JAVA、ASP等,CGI是一种大家都比较熟悉的一种实现上述功能的有效途径,本文将就如何在Windows平台下实现CGI功能作一介绍。
一、CGI概述
- 1.CGI概念
- CGI即通用网关接口(Common Gateway Interface),它是一个WWW服务器主机对外服务的标准接口。一般来说,一个CGI接口的功能就是在超文本文件和服务器主机应用程序间传递信息。
-
- 2.CGI程序语言
- 事实上,任何一种程序语言,只要能在服务器主机上利用CGI接口来编写应用程序,都可以叫作CGI程序语言。目前最为流行的CGI程序语言有四种:C、Shell、Perl和Visual
Basic,其它一些语言也有许多人在用,如TCL、Frotran及AppleScript等。下文我们将介绍用C语言编写CGI的方法。
-
- 3.CGI程序的执行
- CGI程序一般是个可执行程序。编译好的CGI程序一般要集中放在一个目录下。具体存放的位置随操作系统的不同而不同,例如UNIX系统下是放在cgi-bin子目录下,而在Windows操作下(注意,这里不包括NT4.0)以Webstar或Website作WWW服务器,CGI程序都放在cgi-win下。C
GI程序的执行一般有两种调用方式:一种是通过URL直接调用,如:"http://gjy.sic.o.ml.or
g/cgi-win/cgi.exe",在Netscape的URL栏里直接写入上述描述就可以调用该程序:另一种方式,也是主要的方式是通过交互式主页里的FORM栏调用,通常都是用户在填完一张表后按确认按钮启动CGI程序。
-
- 4.CGI工作的主要流程
- CGI工作的主要流程是:1.通过HTML获取用户输入的信息;2.将用户输入的信息传给服务器主机应用程序(如数据库查询);3.将服务器处理结果通过HTML文件返回给用户。
二、Windows平台下CGI的工作原理
- CGI主要的功能不外乎在服务器应用程序和客户之间传递信息。我们知道,通常CGI应用在服务器和客户端传递信息是通过输入输出流来实现的,如UNIX平台下的CGI,通过读取输入流Scanf来获取用户输入,读取输出流printf向用户输出结果。而Windows系统下CGI实现这一功能是通过文件系统来实现,即通过一个特定的输入文件来获取用户输入的信息,通过一个输出文件向用户传递结果。
- 这里这个输入文件是由WWW服务器生成的一个临时文件,里面包含了各种环境信息及用户输入信息,以key=value的形式给出,类似于Windows里的INI文件。下面以一个典型的该文件为例说明主要层的含义。
- [CGI]
- Request Protocol=HTTP/1.0
- Repuest Method=POST
- Executable Path=/cgi-win/cgitest.exe
- Logical Path=/CGI
- Physical Path=c:\httpd\htdocs\CGI
- Server Software=Website /1.1(Shareware non-commercial License))
- Server Name=gjy.sic.o.ml.org
- Server Port=80
- Server Admin=gjy@gjy.sic.o.ml.org
- CGI Version=CGI/1.1 WIN
- Remote Adress=2.02.114.2.182
- [system〗
- Debug Mode=No
- Output File=D:\hs06f12d.out
- */*=Yes
- image/gif=Yes
- image/x-xbitmap=Yes
- image/jpeg=Yes
- [Extra Headers〗
- User-Agent=Mozilla/3.0 (Windows;I;32bit)
- [Fotra rm Literal〗
- textl=hello world
- radio1=2
- [Form External〗
- field300chars=D:\hs06f12d.000 300
- fieldwith l inebreaks=D:\hs06f12d.001 43
- [Frm Huge〗
- fiel d230
- K=d:s06f12d.002 276920
-
- 下面将主要各栏的意义解释如下:
- 1.CGI
- 这一栏包含大部分的CGI信息,如要求的协议Request Protocol,提取用户信息的方式Me
thod,执行程序的路径Exectable,服务器软件(Server Software),服务器名(Server
Name), 端口号(server Port)等。
- 2.Accept栏
- 这一栏包含客户端可以接受的文件类型。
- 3.System栏
- 这一栏包含一些Widnows CGI使用的特别项目如输出(Output File),Content File
- 4.Form Literal资料栏
- 如果用户端的要求是使用POST方式,用户输入的资料会被解码后以key=value的方式放在这一栏里,这里的key即输入栏的变量名,value是用户输入的信息。
- 5.Form External栏
- 如果解码后的字串长度超过254byte,或字串中含有控制字元,系统会把这些信息存在该栏指定的临时文件里并指出长度。
三、CGI应用的实现
- 1、开发平台
- 首先操作系统应为Windows操作系统。我们用的是Windows 95。其次需要建立WWW服务器
,我们用的是Website1.1。安装website并设置各相应目录后,将主页放入主目录中。
- 2、交互主页的制作
- 交互主页就是用户可以在主页上输入信息,而不是单纯仅供浏览的主页。一般来说,用户输入信息的形式有填写编辑框,点选无线按钮等选择框及选择下拉菜单等。下面是一个简单的例子。
- <HTML>
- <HEAD>
- <TITLT>Form Sample</TITLE>
- <HEAD>
- <BODY>
- <FORM ACTION="http://gjy.sic.o.ml.org/cgi/win/sample.exe"METHOD=POST>
- A Text Input:<INPUT TYPE="text"><BR>
- A Radio Input:
- 1<INPUT TYPE="radio"NAME="radiol"VALUE=1>
- 2<input type="radio" NAME="radiol"VALUE=2>
- 3<INPUT TYPE="radio"NAME="radiol"VALUE=3><BR>
- OK Input:<INPUT TYPE="submit"VALUE="OK">
- <INPUT TYPE="reset" VALUE="reset">
- </FORM>
- </BODY>
- </HTML>
- 将上述标记存成HTML文件,该主页作好后,将其放在website设定的主目录中。然后用浏览器观看,将会看到结果。
- 其中FORM:说明一个交互式输入组合框。
- ACTION:指定该FORM对应的CGI程序的URL。
- INPUT:输入的形式,text为编辑框,radio为无线按钮等。
- INPUT里的第一个参数TYPE表明输入的类型,第二个参数NAME表示该输入框代表的变量名。用户在此输入的信息将存在这个变量里。CGI程序也是通过这些变量提取用户输入信息。
- 3.CGI程序编写
- 前面我们说过,原则上CGI程序可以用任何语言编写,但在windows平台下,一般只有
C和VB是适合的。因为CGI程序是后台执行的back-end程序,C和VB都可以方便地生成无界面的
back-end程序。考虑到效率,我们用C语言来作CGI程序的编写。
- Web server会通过Winexec来执行back-end,命令格式如下:
- back-end-exe cgi-data-file content-file outputfile url-args
- back-end-exe是CGI程序的完整路径,cgi-data-file是服务器产生的CGI资料文件,值为完整的路径:content-file是客户端发出的请求,其信息放在临时目录下的文件里,值为完整的路径;output-file是程序处理的结果,值为完整路径。url-args为URL中?后的参数。
- 服务器生成的临时输入文件在客户请求结束后即自动消失,所以CGI程序的第一步就是截取该文件,然后将所需的信息提取出来并过滤,最后得到的就是用户输入,然后对其作相应处理,如写入留言板或转交给数据库应用程序作查询处理。
- 值得一提的是VC和VB都提供了专用的从INI文件中提取信息的函数,即GetPrivateprofi
leString()。
- 4、服务器应用程序
- 这一部分程序的功能就是对CGI转来的用户信息进行处理,处理的结果交给CGI程序的ou
tput-file,通过CGI将其转交给用户。典型的服务器应用程序以数据库查询为代表。
-
计算机世界
|